package main

import "fmt"

/*
  在学校中，N个小朋友站成一队， 第i个小朋友的身高为height[i]，
  第i个小朋友可以看到的第一个比自己身高更高的小朋友j，那么j是i的好朋友(要求j &gt; i)。
  请重新生成一个列表，对应位置的输出是每个小朋友的好朋友位置，如果没有看到好朋友，请在该位置用0代替。
  小朋友人数范围是 [0, 40000]。
*/

func main() {
	var n int
	var height []int
	var friends []int
	var stack []int
	fmt.Printf("请输入学生人数N：")
	fmt.Scanf("%d", &n)
	height = make([]int, n)
	friends = make([]int, n)
	stack = make([]int, n)
	stackTop := 0
	fmt.Printf("请输入学生身高：")
	for i := 0; i < n; i++ {
		fmt.Scanf("%d", &height[i])
	}
	stack[0] = 0
	for i := 1; i < n; i++ {
		for len(stack) > 0 && height[stack[stackTop]] < height[i] {
			idx := stack[stackTop]
			stack = stack[:stackTop]
			friends[idx] = i
			stackTop--
		}
		stack = append(stack, i)
		stackTop++
	}
	for i := 0; i < n; i++ {
		fmt.Printf("%d ", friends[i])
	}
}
